package com.fare.taluo.application.crawl;

import java.util.Date;
import java.util.List;

import com.dayatang.querychannel.support.Page;
import com.fare.taluo.vo.auth.UserInfoVO;
import com.fare.taluo.vo.core.TaskInfoEntityVO;
import com.fare.taluo.vo.core.TaskInfoEntityVOVO;
import com.fare.taluo.vo.crawl.CrawlLineVO;

public interface TaskTemplateApplication {

	/**
	 * 获取一个任务
	 * 
	 * @param id
	 * @return
	 */
	public TaskInfoEntityVO findTaskInfoEntityVO(long id) throws Exception;

	/**
	 * 删除一个任务
	 * 
	 * @param ac
	 */
	public void deleteTaskInfoEntity(long id) throws Exception;

	/**
	 * 
	 * 保存或更新一个任务
	 * @param grabChannel抓取渠道
	 * @param fromCity   出发地
	 * @param toCity     目的地
	 * @param validityFrom抓取日期（从）
	 * @param validityTo  抓取日期（到）
	 * @param grabsope   航班天数 
	 * @param frequency  抓取频率
	 * @param user		 操作人员
	 * @param userCreateTime操作时间
	 * @throws Exception
	 */
	public void saveOrUpdateTaskInfoEntity(String taskName,String grabChannel,String fromCity,String fromCityName,String toCity,String toCityName
			,Date validityFrom,Date validityTo,int grabsopeBegin,int grabsopeEnd,String frequency,String remark,String isReturn,
			int returnDateScope,String isEnable,UserInfoVO user,Date userCreateTime,int priority,long taskId,long sourceId,String hbaseKey) throws Exception;

	
	/**
	 * 根据分页查询任务
	 * @param grabChannel抓取渠道
	 * @param fromCity   出发地
	 * @param toCity     目的地
	 * @param grabsope   航班天数
	 * @param pageNum    页码，从1开始
	 * @param pageSize   分页大小
	 * @return
	 */
	List<TaskInfoEntityVO> findTaskInfoEntityVOCriteriaList(String grabChannel,
			String fromCity, String toCity, int grabsopeBegin,int grabsopeEnd,Date validityFrom, int pageNum,int pageSize);
	
	/**
	 * 分页查询返回 Page<TaskInfoEntityVO> 
	 * @param grabChannel
	 * @param fromCity
	 * @param toCity
	 * @param grabsopeBegin
	 * @param grabsopeEnd
	 * @param validityFrom
	 * @param pageNum
	 * @param pageSize
	 * @return
	 */
	Page<TaskInfoEntityVO> pageFindaskInfoEntityVOCriteriaList(String grabChannel,
			String fromCity, String toCity, int grabsopeBegin,int grabsopeEnd,Date validityFrom, int pageNum,int pageSize);
	
	/**
	 * 按条件查询任务的数量 
	 * @param grabChannel抓取渠道
	 * @param fromCity   出发地
	 * @param toCity     目的地
	 * @param grabsope   航班天数
	 * @return
	 */
	public int countTaskInfoEntityCriteria(String grabChannel,
			String fromCity, String toCity, Date validityFrom,int grabsopeBegin,int grabsopeEnd);
	
	/**
	 * 通过条件返回
	 * @param grabChannel抓取渠道
	 * @param fromCity   出发地
	 * @param toCity     目的地
	 * @param grabsope   航班天数
	 * @return
	 */
	public List<TaskInfoEntityVOVO> findTaskInfoByConsdions(String grabChannel, String fromCity, String toCity, int grabsopeBegin,int grabsopeEnd);
	public List<TaskInfoEntityVOVO> findTaskInfoByConsdion(String grabChannelId, String fromCity, String toCity);
	
	/**
	 * 根据航空公司返回航线
	 * @param grabChannel
	 * @return
	 */
	List<TaskInfoEntityVO> findTaskInfoByGrabChannel(String grabChannel);

	/**
	 * 通过一定条件返回任务，当添加一个新任务之前通过此接口，不为null才可以添加新任务
	 * @param grabChannel 抓去渠道
	 * @param fromCity 出发城市
	 * @param toCity 到达城市
	 * @param validityFrom 抓取时间段
	 * @param validityTo 抓取时间段
	 * @param grabsopeBegin 日期范围 开始
	 * @param grabsopeEnd 日期范围结束
	 * @return
	 */
	public TaskInfoEntityVO findTaskInfoEntityVo(String grabChannel,
			String fromCity, String toCity, Date validityFrom,Date validityTo,int grabsopeBegin,int grabsopeEnd);
	
	/**
	 * 批量导入航线任务
	 * @param lines
	 */
	public void importTasks(List<CrawlLineVO> lines);
	
	/**
	 * 根据航段和网站进行重复性检验
	 * @param fromCity
	 * @param toCity
	 * @param hbaseKey
	 * @return
	 */
	public boolean existTask(String fromCity,String toCity,String hbaseKey);
	
	
	public Page<TaskInfoEntityVO>  findByPage(String grabChannel,String fromCityStr,String toCityStr,int formDate,
			int toDate,Date validityFrom,int pageNum,int pageSize);
	
	
	public void save(TaskInfoEntityVO vo) throws Exception;
	
}
